// Async是一个流程控制工具包，提供了直接而强大的异步功能。基于Javascript为Node.js设计，同时也可以直接在浏览器中使用。
const async = require('async');

// 串行且有关联 -- async.waterfall() 瀑布流
// 串行且无关联 -- async.series()
// async.whilst，一直执行主函数，直到条件不满足，或者发生异常

const axios = (timer) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (3000 === timer) {
                reject("Is Error")
            } else {
                resolve(timer);
            }
        }, timer);
    });
}

const list = [
    2000,
    4000,
    1000,
    2000,
    6000
];

// async.eachSeries([1, 3, 5, 7, 9], (params, callback) => {
//     console.log(params);
//     setTimeout(() => {
//         callback();
//     }, 5000);
// }, (err) => {
//     // 当本次循环执行完成后可以执行这里的操作
//     err && console.log(`err is: ${err}`);
// });

async.eachSeries(list, (params, callback) => {
    if(1000 == params){
       return callback();
    }
    axios(params).then(rs => {
        console.log(rs), callback();
    }).catch(err => {
        callback(err);
    });
}, (err) => {
    // 当本次循环执行完成后可以执行这里的操作
    err && console.log(`err is: ${err}`);
});
